<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container {
            width: 520px;
            height: 280px;
            border: 1px solid red;
            margin: 0 auto;
            position: relative;
            overflow: hidden;
        }

        .content {
            position: absolute;
            left: 0px;
            top: 0px;
            width: 2600px;
            height: 280px;
        }

        img {
            float: left;
        }

        .dot {
            width: 100px;
            height: 20px;
            background: gray;
            position: absolute;
            bottom: 10px;
            left: 50%;
            transform: translate(-50%);
        }

        .dot span {
            width: 15px;
            height: 15px;
            display: inline-block;
            border-radius: 50%;
            background: white;
        }

        .prev {
            position: absolute;
            left: 0px;
            top: 40%;
            color: white;
            font-size: 40px;
        }

        .next {
            position: absolute;
            right: 0px;
            top: 40%;
            color: white;
            font-size: 40px;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="content">
            <img src="./imgs/1t.png" alt="">
            <img src="./imgs/2t.png" alt="">
            <img src="./imgs/3t.png" alt="">
            <img src="./imgs/4t.png" alt="">
            <img src="./imgs/5t.png" alt="">
        </div>
        <div class="dot">
            <span style="background: orange;"></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
        <div class="prev">
            < </div>
                <div class="next">></div>
        </div>
        <script>
            let contentEle = document.querySelector(".content");
            let containerEle = document.querySelector(".container");
            let num = 1; // 当前图片的位置
            let dotsEles = document.querySelectorAll(".dot span");

            let timer;


            // 做动画的函数
            function move(ele, target, cb) {
                for (let key in target) {
                    function run() {
                        // console.log("requestAnimationFrame");
                        let leftNum = parseInt(getComputedStyle(ele, null)[key]);
                        let speed = 10 * (leftNum < target[key] ? 1 : -1);
                        if (leftNum === target[key]) {
                            cb && cb();
                        } else {
                            ele.style[key] = leftNum + speed + "px";
                            // run();
                            requestAnimationFrame(run);
                        }
                    }
                    run();
                }
            }
        

            // 自动轮播
            autoPlay();
            // 复制第一图 到最后一张；
            copyNodes();
            // 点击点添加事件
            addDotEvent()

            // 自动轮播
            let mynum = 1;
            function autoPlay() {
                 timer = setInterval(() => {
                    document.title = mynum++;
                    move(contentEle, { left: -(num + 1) * 520 }, function () {
                        console.log("运动完成");
                        if (num == 6) {
                            // 把容器的left 直接设置成初始位置
                            contentEle.style.left = "-520px";
                            num = 1;
                        }
                        // console.log(num);
                        console.log("num", num);
                        dotsEles.forEach(item => {
                            item.style.background = "white";
                        })
                        dotsEles[num - 1].style.background = "orange";
                    })
                    num++;
                }, 3000);

                containerEle.onmouseenter = function () {
                    // 一旦鼠标进入轮播图 就会自动停止轮播
                    console.log("清除自动轮播");
                    clearInterval(timer);
                }
                containerEle.onmouseleave = function () {
                    console.log("再次启动轮播");
                    autoPlay();
                }

            }
            
            // 复制第一张图到第五张图最后
            function copyNodes() {
                // 获取轮播图的第一张
                let firstImgEle = contentEle.firstElementChild;
                //   console.log(firstImgEle)
                // 复制第一张图 
                let copyFirstImgEle = firstImgEle.cloneNode(true);

                // 复制最后一张到第一张之前 

                let lastImgEle = contentEle.lastElementChild;
                let copyLastImgEle = lastImgEle.cloneNode(true);



                contentEle.style.width = "3640px";
                contentEle.style.left = "-520px";
                contentEle.appendChild(copyFirstImgEle);
                // 把复制的最后一张图加在第一张图之前
                contentEle.insertBefore(copyLastImgEle, firstImgEle);
            }


            // 点击点切换图片相关内容
            // 给每个点添加点击事件
            // 问题 当我点击时候 ，还在自动轮播 图片轮播就会有问题
            // 解决 ：当鼠标移入 轮播图时候 停止自动轮播 当鼠标移开的时候再自动轮播
            function addDotEvent() {

                dotsEles.forEach((dot, key) => {
                    dot.onclick = function () {
                        console.log(key);
                        num = key + 1;
                        move(contentEle, { left: -(key + 1) * 520 }, function () {
                            console.log("点击之后运动完成");
                        })
                        // 改变当前点击点的颜色；
                        dotsEles.forEach(item => {
                            item.style.background = "white";
                        })
                        this.style.background = "orange";
                    }
                })
            }

            // 存在2个问题 ：1.点击点之后再轮播 那么轮播图位置就有问题？？
            //  解决：把全局记录num的值和 点击当前的点的key值关联
            // 2.自动轮播的时候 点的选中位置应该和轮播的位置一致？
            // 解决 ：每次轮播的时候 需要把当前位置和点的元素样式关联起来；



            // 还有2个大问题 
            // 1.下一张和上一张的问题 ？？
            // 2.连续点击问题？ 防抖。


            // 实现上一张和下一张的功能
            let prevEle = document.querySelector(".prev");
            let nextEle = document.querySelector(".next");
            prevEle.onclick = function () {
                num--;
                console.log("--", num);
                move(contentEle, { left: -num * 520 }, function () {
                    console.log("运动完成");
                    // 复位操作 回到第五张的位置
                    if (num <= 0) {
                        contentEle.style.left = "-2600px";
                        num = 5;
                    }
                    dotsEles.forEach(item => {
                        item.style.background = "white";
                    })
                    if (num > 0) {
                        dotsEles[num - 1].style.background = "orange";
                    }
                })
            }
            nextEle.onclick = function () {

                console.log("??", num);
               
                move(contentEle, { left: -(num + 1) * 520 }, function () {
                    console.log("运动完成");

                    dotsEles.forEach(item => {
                        item.style.background = "white";
                    })

                    // 当点击下一张的时候 如果是最后一张 我会让content重新回到第一张；
                    if(num>5){
                        contentEle.style.left = "-520px";
                        num = 1;
                    }
                    if (num <= 5) {
                        dotsEles[num - 1].style.background = "orange";
                    }

                })
                num++;
                // if(num>5){
                //     num = 1;
                // }
               
            }

// 本来 是5张图  我现在是7张图了 ； length-1  除非是 copy之后去获取

// 问题：轮播图切换到其他页面时候，导致运转不正常的情况；
// 监听切换页面时候的事件 ，然后一旦切换了页面就停止定时器 ，再次切换回来的时候再开始轮播定时器；
let judge = true;
window.addEventListener("visibilitychange",function(){
    console.log("切换页面了",judge);
    if(judge){
        clearInterval(timer);
    }else{
        autoPlay();
    }
    judge = !judge;
    
})

        </script>
</body>

</html>